/****************************************************
	文件：ResLoadModelSwitchMenu.cs
	作者：HuskyT
	邮箱：1005240602@qq.com
	日期：2020/10/10 10:37:56
	功能：资源加载模式 开关
*****************************************************/

using UnityEngine;
using UnityEditor;
using System.IO;

namespace HTFramework.ResKit
{
    public class ResLoadModeSwitchMenu : MonoBehaviour
    {
        /// <summary>
        /// ResLoad Mode 在未设置的时候默认值为 0
        /// </summary>
        private static ResLoadModeEnum mResLoadMode = ResLoadModeEnum.DEFAULT;

        /// <summary>
        /// 资源加载模式
        /// </summary>
        private static ResLoadModeEnum ResLoadMode
        {
            get
            {
                //第一次设置 ResLoadMode
                if (mResLoadMode == ResLoadModeEnum.DEFAULT)
                {
                    //获取存储的 ResLoadMode 值，默认为 InBuild
                    mResLoadMode = (ResLoadModeEnum)EditorPrefs.GetInt(FConsts.RESLOAD_MODE_KEY, (int)ResLoadModeEnum.IN_BUILD);
                }
                return mResLoadMode;
            }
            set
            {
                mResLoadMode = value;
                EditorPrefs.SetInt(FConsts.RESLOAD_MODE_KEY, (int)value);
            }
        }

        /// <summary>
        /// 切换 ResLoad Mode
        /// </summary>
        [MenuItem(FConsts.RESLOAD_SWITCH_MENU_PATH, false, 3)]
        private static void SwitchResLoadMode()
        {
            ResLoadMode = ResLoadMode == ResLoadModeEnum.IN_EDIT ? ResLoadModeEnum.IN_BUILD : ResLoadModeEnum.IN_EDIT;

            //若为 InEdit 模式：
            if (ResLoadMode == ResLoadModeEnum.IN_EDIT)
            {
                //读取 ResItem 脚本
                string[] contents = File.ReadAllLines(FConsts.RESITEM_SCRIPT_PATH);
                for (int i = 0; i < contents.Length; i++)
                {
                    if (contents[i].StartsWith("//#define"))
                    {
                        if (contents[i].Contains("IN_EDIT_MODE"))
                        {
                            contents[i] = "#define IN_EDIT_MODE";
                            break;
                        }
                    }
                }
                File.WriteAllLines(FConsts.RESITEM_SCRIPT_PATH, contents);
            }
            //若为 InBuild 模式：
            else
            {
                //读取 ResItem 脚本
                string[] contents = File.ReadAllLines(FConsts.RESITEM_SCRIPT_PATH);
                for (int i = 0; i < contents.Length; i++)
                {
                    if (contents[i].StartsWith("#define"))
                    {
                        if (contents[i].Contains("IN_EDIT_MODE"))
                        {
                            contents[i] = "//#define IN_EDIT_MODE";
                            break;
                        }
                    }
                }
                File.WriteAllLines(FConsts.RESITEM_SCRIPT_PATH, contents);
            }
            AssetDatabase.Refresh();
            Debug.Log("资源加载模式：" + ResLoadMode);
        }

        /// <summary>
        /// 切换 ResLoadSwitch 的验证方法
        /// 每次编译都会执行此方法
        /// </summary>
        [MenuItem(FConsts.RESLOAD_SWITCH_MENU_PATH, true, 3)]
        private static bool SwitchResLoadModeValidate()
        {
            bool inEditMode = ResLoadMode == ResLoadModeEnum.IN_EDIT ? true : false;
            //将菜单设置成可切换状态
            //参数（菜单，依据什么切换）
            Menu.SetChecked(FConsts.RESLOAD_SWITCH_MENU_PATH, inEditMode);
            return true;
        }
    }
}
